Lab 10:

library(tidyverse)
## ── Attaching packages ──────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.1.0     ✔ purrr   0.2.5
## ✔ tibble  1.4.2     ✔ dplyr   0.7.6
## ✔ tidyr   0.8.1     ✔ stringr 1.3.1
## ✔ readr   1.1.1     ✔ forcats 0.3.0
## ── Conflicts ─────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(janitor)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
## 
##     date
library(gganimate)


# extras?
library(RColorBrewer)
library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
## 
##     discard
## The following object is masked from 'package:readr':
## 
##     col_factor
library(ggimage)
  1. Read in sb_buoy_df (hourly buoy data for SB) and wb_df (World Bank aquaculture data), and make the column names snake_case

Use janitor package to clean up the sb_buoy_df column names (to snake_case):

## Parsed with column specification:
## cols(
##   .default = col_integer(),
##   `YYYY-MM-DD` = col_character(),
##   `HH:MM (LST)` = col_time(format = ""),
##   `Zenith (deg)` = col_double(),
##   `Azimuth (deg)` = col_double(),
##   `Precip Wat (cm)` = col_double(),
##   `AOD (unitless)` = col_double(),
##   `AOD RAN (unitless)` = col_double(),
##   `Ozone (cm)` = col_double(),
##   `Albedo (unitless)` = col_double()
## )
## See spec(...) for full column specifications.
## Warning in rbind(names(probs), probs_f): number of columns of result is not
## a multiple of vector length (arg 1)
## Warning: 365 parsing failures.
## row # A tibble: 5 x 5 col     row col         expected   actual   file                expected   <int> <chr>       <chr>      <chr>    <chr>               actual 1    24 HH:MM (LST) valid date 24:00:00 'solar_sb_2010.csv' file 2    48 HH:MM (LST) valid date 24:00:00 'solar_sb_2010.csv' row 3    72 HH:MM (LST) valid date 24:00:00 'solar_sb_2010.csv' col 4    96 HH:MM (LST) valid date 24:00:00 'solar_sb_2010.csv' expected 5   120 HH:MM (LST) valid date 24:00:00 'solar_sb_2010.csv'
## ... ................. ... ........................................................... ........ ........................................................... ...... ........................................................... .... ........................................................... ... ........................................................... ... ........................................................... ........ ...........................................................
## See problems(...) for more details.
## Parsed with column specification:
## cols(
##   .default = col_integer(),
##   `YYYY-MM-DD` = col_character(),
##   `HH:MM (LST)` = col_time(format = ""),
##   `Zenith (deg)` = col_double(),
##   `Azimuth (deg)` = col_double(),
##   `Precip Wat (cm)` = col_double(),
##   `AOD (unitless)` = col_double(),
##   `AOD RAN (unitless)` = col_double(),
##   `Ozone (cm)` = col_double(),
##   `Albedo (unitless)` = col_double()
## )
## See spec(...) for full column specifications.
## Warning in rbind(names(probs), probs_f): number of columns of result is not
## a multiple of vector length (arg 1)
## Warning: 365 parsing failures.
## row # A tibble: 5 x 5 col     row col         expected   actual   file                expected   <int> <chr>       <chr>      <chr>    <chr>               actual 1    24 HH:MM (LST) valid date 24:00:00 'solar_ak_2010.csv' file 2    48 HH:MM (LST) valid date 24:00:00 'solar_ak_2010.csv' row 3    72 HH:MM (LST) valid date 24:00:00 'solar_ak_2010.csv' col 4    96 HH:MM (LST) valid date 24:00:00 'solar_ak_2010.csv' expected 5   120 HH:MM (LST) valid date 24:00:00 'solar_ak_2010.csv'
## ... ................. ... ........................................................... ........ ........................................................... ...... ........................................................... .... ........................................................... ... ........................................................... ... ........................................................... ........ ...........................................................
## See problems(...) for more details.
## Parsed with column specification:
## cols(
##   .default = col_integer(),
##   `YYYY-MM-DD` = col_character(),
##   `HH:MM (LST)` = col_time(format = ""),
##   `Zenith (deg)` = col_double(),
##   `Azimuth (deg)` = col_double(),
##   `Precip Wat (cm)` = col_double(),
##   `AOD (unitless)` = col_double(),
##   `AOD RAN (unitless)` = col_double(),
##   `Ozone (cm)` = col_double(),
##   `Albedo (unitless)` = col_double()
## )
## See spec(...) for full column specifications.
## Warning in rbind(names(probs), probs_f): number of columns of result is not
## a multiple of vector length (arg 1)
## Warning: 365 parsing failures.
## row # A tibble: 5 x 5 col     row col         expected   actual   file                  expected   <int> <chr>       <chr>      <chr>    <chr>                 actual 1    24 HH:MM (LST) valid date 24:00:00 'solar_hilo_2010.csv' file 2    48 HH:MM (LST) valid date 24:00:00 'solar_hilo_2010.csv' row 3    72 HH:MM (LST) valid date 24:00:00 'solar_hilo_2010.csv' col 4    96 HH:MM (LST) valid date 24:00:00 'solar_hilo_2010.csv' expected 5   120 HH:MM (LST) valid date 24:00:00 'solar_hilo_2010.csv'
## ... ................. ... ............................................................. ........ ............................................................. ...... ............................................................. .... ............................................................. ... ............................................................. ... ............................................................. ........ .............................................................
## See problems(...) for more details.

A gganimate example!

Data for CO2 emissions (by country) from WorldBank

co2 <- read_csv("co2_wb.csv")
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   country = col_character(),
##   code = col_character(),
##   indicator = col_character(),
##   ind_code = col_character(),
##   `2015` = col_character(),
##   `2016` = col_character(),
##   `2017` = col_character()
## )
## See spec(...) for full column specifications.
co2_tidy <- co2 %>% 
  filter(country == "China" | 
           country == "United States" | 
           country == "European Union" | 
           country == "India" | 
           country == "Russian Federation") %>% 
  gather(year, emissions_kt, `1960`:`2014`) %>% 
  select(country, year, emissions_kt)

co2_plot <- ggplot(co2_tidy, aes(x = as.numeric(year), y = emissions_kt, group = country)) + 
  geom_line(aes(color = country), size = 1) +
  geom_point(aes(color = country)) +
  geom_text(aes(label = country, color = country), position = position_nudge(y = 200000), size = 4) +
  scale_color_manual(breaks = c("China", "United States","European Union","India", "Russian Federation"), values = c("goldenrod1","darkorchid1","dodgerblue","coral1","cyan3")) +
  labs(x = "Year", y = expression(CO[2]~Emissions~(kT))) +
  coord_cartesian(clip = 'off') + 
  transition_reveal(country, as.numeric(year)) +
  theme_minimal() +
  theme(legend.position = "NA")

co2_plot
## Warning: Removed 2 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 2 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 2 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 3 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 3 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 4 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 4 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 5 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 5 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 6 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 6 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 7 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 8 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 8 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 9 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 9 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 10 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 10 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 11 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 11 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 12 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 12 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 13 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 14 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 14 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 15 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 15 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 16 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 16 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 17 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 17 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 18 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 18 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 19 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 20 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 20 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 21 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 21 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 22 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 22 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 23 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 23 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 24 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 24 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 25 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 26 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 26 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 27 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 27 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 28 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 28 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 29 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 29 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 30 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 30 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 31 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 31 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 32 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 33 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 33 rows containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

## Warning: Removed 32 rows containing missing values (geom_path).

Another gganimate example: total aquaculture production (kT) for United States and Central American countries

aq_df <- read_csv("aq_wb.csv")
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   country = col_character(),
##   code = col_character(),
##   indicator = col_character(),
##   ind_code = col_character(),
##   `1960` = col_integer(),
##   `1961` = col_integer(),
##   `1962` = col_integer(),
##   `1963` = col_integer(),
##   `1964` = col_integer(),
##   `1965` = col_integer(),
##   `1966` = col_integer(),
##   `1967` = col_integer(),
##   `1968` = col_integer(),
##   `1969` = col_integer(),
##   `1970` = col_integer(),
##   `1971` = col_integer(),
##   `1972` = col_integer(),
##   `1973` = col_integer(),
##   `1974` = col_integer(),
##   `1975` = col_integer()
##   # ... with 9 more columns
## )
## See spec(...) for full column specifications.
aq_tidy <- aq_df %>% 
  filter(country == "Brazil" | 
           country == "Chile" | 
           country == "Ecuador" |
           country == "United States") %>% 
  gather(year, aq_prod, `1960`:`2014`) %>% 
  filter(year >= 1990) %>% 
  mutate(aq_mil = aq_prod/1000000) %>% 
  select(country, year, aq_mil)

# PLOT IT
aq_plot <- ggplot(aq_tidy, aes(x = as.numeric(year), y = aq_mil, group = country)) + 
  geom_line(aes(color = country), size = 1) +
  geom_point(aes(color = country)) +
  geom_text(aes(label = country, color = country), position = position_nudge(y = 0.03, x = 1), size = 5) +
  scale_color_manual(values = c("darkcyan","goldenrod3","darkmagenta","chocolate1")) +
  labs(x = "Year", y = expression(Aquaculture~Production~(10^6~metric~tons))) +
  coord_cartesian(clip = 'off') + 
  transition_reveal(country, as.numeric(year)) +
  theme_bw() +
  theme(legend.position = "NA", panel.grid.minor = element_blank(), panel.grid.major = element_blank(),
        axis.text.x = element_text(size=12), axis.text.y = element_text(size = 14),
        axis.title.x = element_text(size=14, face = "bold"),
        axis.title.y = element_text(size=14,face="bold")) +
  scale_x_continuous(expand = c(0,0), limits = c(1990, 2017)) +
  scale_y_continuous(expand = c(0,0))

aq_plot

# expression(Aquaculture~Production~(10^6~metric tons))

# TRYING ANOTHER THING: custom points (fish)

fish = sample("fish.png")

aq_plot2 <- ggplot(aq_tidy, aes(x = as.numeric(year), y = aq_mil, group = country)) + 
  geom_line(aes(color = country), size = 1) +
  geom_point(aes(color = country)) +
  geom_image(aes(image = fish)) +
  geom_text(aes(label = country, color = country), position = position_nudge(y = 0.04, x = 1), size = 5) +
  scale_color_manual(values = c("darkcyan","goldenrod3","darkmagenta","chocolate1")) +
  labs(x = "Year", y = expression(Aquaculture~Production~(10^6~metric~tons))) +
  coord_cartesian(clip = 'off') + 
  transition_reveal(country, as.numeric(year)) +
  theme_bw() +
  theme(legend.position = "NA", panel.grid.minor = element_blank(), panel.grid.major = element_blank(),
        axis.text.x = element_text(size=12), axis.text.y = element_text(size = 14),
        axis.title.x = element_text(size=14, face = "bold"),
        axis.title.y = element_text(size=14,face="bold")) +
  scale_x_continuous(expand = c(0,0), limits = c(1990, 2017)) +
  scale_y_continuous(expand = c(0,0))
## Warning: Ignoring unknown parameters: image_colour
aq_plot2